﻿using System.Collections;
using UnityEngine;

public class Emitter : MonoBehaviour {
    // 用来保存生成波次的预制件游戏对象
    public GameObject[] waves;

    // 现在第几波敌人的索引
    private int currentWave;

    // [SerializeField]
    // private Manager manager;

    void Start () {

        StartCoroutine(Init());
    
    }


    IEnumerator Init() {
        // 如果我们要生成的敌人阵列对象为0的时候 退出协程
        if (waves.Length == 0) {
            yield break;
        }

        // 从所有的游戏对象中寻找类型为Manager的组件
        // 很有可能发生空指针
        Manager manager = FindObjectOfType<Manager> ();

        while (true) {

            // Debug.Log ("manager.IsPlaying()");
            // Debug.Log (manager.IsPlaying ());
            // 游戏还未开始的时候
            while (manager.IsPlaying () == false) {
                // 做待机处理

                // Debug.Log ("待机");
                yield return new WaitForEndOfFrame ();
                //   yield return 0;
            }

            // 生成一波敌人
            GameObject wave = (GameObject) Instantiate (waves[currentWave], transform.position, Quaternion.identity);

            // 把生成的一波敌人 变成自己的子元素 （这一波敌人的父元素变成这个发射器）
            wave.transform.parent = transform;

            // 这一波敌人的子元素还超过一个的时候，不进行任何操作 跳过这一帧
            while (wave.transform.childCount != 0) {
                // yield return null; // 等价
                yield return new WaitForEndOfFrame ();
            }

            // 删除这一波敌人
            Destroy (wave);

            // 已经配置好的敌人走到最后一波结束的时候，从第一波开始

            if (waves.Length <= ++currentWave) {
                currentWave = 0;
            }

            // 这里应该是有一个结束条件的 比如最后一波敌人是BOSS的话
            // 这里去执行结束动画 转场之类的的操作
            // 本次是demo 所以无限循环一下

            // currentWave++;
            // if (waves.Length <= currentWave) {
            //     currentWave = 0;
            // }

        }
    }
}